from enum import Enum
from sn.sn_manager import SnManager

class CommonTopics(Enum):
    # 设备端定频向云平台推送的设备属性（properties）信息
    # 具体内容范围参见物模型内容
    PRODUCT_TOPIC_OSD = "thing/product/%s/osd"  # 设备 > 云平台 (OSD)

    # 设备端按需上报向云平台推送的设备属性（properties）信息
    # 具体内容范围参见物模型内容
    TOPIC_STATE = "thing/product/%s/state"  # 设备 > 云平台 (状态)

    # 云平台向设备发送的服务信息
    # 具体service identifier 见物模型内容
    TOPIC_SERVICES = "thing/product/%s/services"  # 云平台 > 设备 (服务)

    # 设备对服务的回复，处理结果
    TOPIC_SERVICES_REPLY = "thing/product/%s/services_reply"  # 设备 > 云平台 (服务回复)

    # 设备端向云平台发送的，需要关注和处理的事件
    # 比如SD满了，飞机解禁禁飞区等信息（事件范围参见物模型内容）
    TOPIC_EVENTS = "thing/product/%s/events"  # 设备 > 云平台 (事件)

    # 云平台对设备事件的回复，处理结果
    TOPIC_EVENTS_REPLY = "thing/product/%s/events_reply"  # 云平台 > 设备 (事件回复)

    # 设备端向云平台发送请求，为了获取一些信息，比如上传的临时凭证
    TOPIC_REQUESTS = "thing/product/%s/requests"  # 设备 > 云平台 (请求)

    # 云平台对设备请求的回复
    TOPIC_REQUESTS_REPLY = "thing/product/%s/requests_reply"  # 云平台 > 设备 (请求回复)

    # 设备上下线、更新拓扑信息
    TOPIC_STATUS = "sys/product/%s/status"  # 设备 > 云平台 (状态)

    # 平台响应设备上下线、更新拓扑
    TOPIC_STATUS_REPLY = "sys/product/%s/status_reply"  # 云平台 > 设备 (状态回复)

    # 云平台设置设备属性，accessMode = rw 表示可读写
    TOPIC_PROPERTY_SET = "thing/product/%s/property/set"  # 云平台 > 设备 (属性设置)

    # 设备属性设置的响应
    TOPIC_PROPERTY_SET_REPLY = "thing/product/%s/property/set_reply"  # 设备 > 云平台 (属性设置回复)

    # DRC 协议上行
    TOPIC_DRC_UP = "thing/product/%s/drc/up"  # 设备 > 云平台 (DRC 上行)

    # DRC 协议下行
    TOPIC_DRC_DOWN = "thing/product/%s/drc/down"  # 云平台 > 设备 (DRC 下行)


    @staticmethod
    def get_topic_list():
        topic_list = []
        gateway_sn_list = SnManager.get_gateway_sn_list()
        # dev_sn_list = SnManager.get_device_sn_list()
        for gateway_sn in gateway_sn_list:
            topic_list.append(CommonTopics.PRODUCT_TOPIC_OSD.value % gateway_sn)
            topic_list.append(CommonTopics.TOPIC_STATE.value % gateway_sn)
            topic_list.append(CommonTopics.TOPIC_SERVICES_REPLY.value % gateway_sn)
            topic_list.append(CommonTopics.TOPIC_EVENTS.value % gateway_sn)
            topic_list.append(CommonTopics.TOPIC_REQUESTS.value % gateway_sn)
            topic_list.append(CommonTopics.TOPIC_STATUS.value % gateway_sn)
            topic_list.append(CommonTopics.TOPIC_PROPERTY_SET_REPLY.value % gateway_sn)
            topic_list.append(CommonTopics.TOPIC_DRC_UP.value % gateway_sn)
        # for dev_sn in dev_sn_list:
        #     topic_list.append(CommonTopics.PRODUCT_TOPIC_OSD.value % dev_sn)
        #     topic_list.append(CommonTopics.TOPIC_STATE.value % dev_sn)
        return topic_list